package com.shihan._02_juc_concurrent_utils._01_blocking_queue;

import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.LinkedBlockingQueue;

/**
 * @Description ArrayBlockingQueue 数组方式实现的阻塞队列
 *                  1、底层数据结构是：数组（并且是环形数组：超过最大长度后，归零重新开始）；
 *                     PS：不会动态扩容，所以一开始初始化时，就要设计好 capacity 长度；
 *                  2、初始化时，需要指明数组长度；
 *                  3、使用较多的是 ArrayBlockingQueue，并且锁层面的消耗较低，效率相对 LinkedBlockingQueue 要高一些；
 * @Author shihan
 * @Date 2021/8/16 7:52
 * @Version 1.0
 */
public class BlockingQueue_01 {

    public static void main(String[] args) throws InterruptedException {
        // 通过 有参构造方法、put、take 这三个方法，查看一下 ArrayBlockingQueue 的源码实现
        ArrayBlockingQueue<String> arrayBlockingQueue = new ArrayBlockingQueue<String>(10);

        arrayBlockingQueue.put("shihan");
        String take = arrayBlockingQueue.take();

        // LinkedBlockingQueue
        LinkedBlockingQueue<String> linkedBlockingQueue = new LinkedBlockingQueue<>();
        linkedBlockingQueue.put("shi");
        String take1 = linkedBlockingQueue.take();

    }

}
